package com.rem.rabbitmq.ee.Eunfair;

import com.rabbitmq.client.Channel;
import com.rem.rabbitmq.ee.RabbitMqUtils;

import java.util.Scanner;


/**
 * 不公平分发
 * 在消费者方 设置  channel.basicQos(1); 消费消息则不是轮训分发
 * <p>
 * <p>
 * basicQos 设置的是缓存区大小 0 到 65535 即unack的消息数量
 * 虽然自动应答传输消息速率是最佳的，但是，在这种情况下已传递但尚未处理的消息的数量也会增加，从而增加了消费者的RAM消耗
 * <p>
 * 消费者消费了大量的消息如果没有确认的话，会导致消费者连接节点的内存消耗变大，所以找到合适的预取值是一个反复试验的过程，
 * 不同的负载该值取值也不同100到300范围内的值通常可提供最佳的吞吐量，并且不会给消费者带来太大的风险。预取值为1是最保守的。
 * 当然这将使吞吐量变得很低，特别是消费者连接延迟很严重的情况下，特别是在消费者连接等待时间较长的环境中。对于大多数应用来说，稍微高一点的值将是最佳的
 *
 * @author Rem
 * @date 2021-12-23
 */

public class UnfairProducer {

    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMqUtils.getChannel();

        //声明队列
        channel.queueDeclare(RabbitMqUtils.QUEUE_UNFAIR, false, false, false, null);


        System.err.println("开始发送消息...");
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String message = scanner.next();

            //发送消息
            channel.basicPublish("", RabbitMqUtils.QUEUE_UNFAIR, null, message.getBytes());
            System.err.println("发送消息完毕" + message);
        }
    }
}
